// Copyright(c) 2008 Tri Tech Information Systems Inc. 
// Distributed under the Boost Software License, Version 1.0.
//     (See accompanying file ../../LICENSE_1_0.txt or copy at
//           http://www.boost.org/LICENSE_1_0.txt)
//     
#include <string>

/**
 * Base A
 */
struct A
{
    A(int) {}
    virtual std::string a() = 0;
    virtual void excluded() = 0;
};

struct B : public A
{
    B(int, float) : A(0) {}
    virtual std::string b() { return "yikes"; }
    virtual void e() = 0;
    virtual void excluded(){}
};

struct C : public B
{
    C(int, float, char) : B(0, 0) {}
    virtual std::string a() { return "yellow"; }
    virtual void e(){}
};

struct Unrelated
{
    virtual void a() {}
    virtual void b() {}
};

struct SomeObject
{
    SomeObject(Unrelated * r) {}
};


void Do(A*) {}

int SomethingUsefull(A & self, int a, int b)
{
    return a + b;
}

